תגידו לי אתם מה יהיה טוב יותר בדוגמה הבאה (סמלי בלבד):
Math::sqrRoot(5);
// the non-static way
$math = new Math();
$result = $math->sqrRoot(5);
אני חושב שהגיע הזמן לרכז בעברית את כל הדברים שצריך לדעת על שימוש בסטטיות - ממה צריך להיזהר כשעושים את זה, ואם בכלל כדאי לעשות את זה.
8 תשובות
בPHP פונקציות כמו sqrt בכלל לא צריכות להיות שייכות למחלקה. אם אתה רוצה אותן מופרדות, שים אותן בניימספייס אחר. אבל אין בינהם שום קשר לתכנות מונחה עצמים.
בשפות אחרות, באיחוד כאלה שבהם אין קוד מחוץ למחלקות, כמו java / c#, אין לך כל כך ברירה ושם זה סיפור קצת שונה.
יש משהו במה שאתה אומר. אתה בעצם אומר שאין צורך בחברי מחלקה סטטיים ב-PHP כי כל המטרה של זה זה לשלב גם את הגישה הפרוצדורלית? (וב-PHP כבר יש את זה, אז אין צורך?)
המטרה של מטודות סטטיות היא לא לשלב גישה פרוצדורלית, אלה מניפולציות או חסכון בזכרון. ב-PHP אין בזה צורך.
מעבר לזה שיש יחסית מעט מקרים שבהם יש לך מחלקת Math. יש לך מחלקה שפותרת משוואות, או מחלקה שעושה עוד משהו מועיל ובהם יכולה להיות מטודה פרטית שמוציאה שורש. כל שאר התוכנה שלך בכלל לא צריכה את המחלקה Math.
אנטיפרטרן, מיותר לחלוטין עם הרבה בעיות.
בכל דוגמה שתמצא ב-PHP תראה ששימוש במשהו סטטי מעיד על ארכיטקטורה לא נכונה, לכן כל עוד אתה נמנע מדברים סטטים, הסיכוי שלך לעשות טעיות ארכיטקטוריות הרבה יותר נמוך.
הבעיה הכי פחות קריטית מבחינה ארכיטקטורית עם סינגלטון היא זו שמחלקה מתחילה לעשות שני דברים: להיות אחריאית על יצירת מחלקה אחרת ולעשות את הביזנס לוגיקה האמיתית שהיא צריכה לעשות. אתה בתור מתכנת רוצה שמחלקה תעשה או תהיה אחראית רק על דבר אחד. עם סינגלטון, שני אלו הם פעולות שונות קונצפטואלית. אם אתה רוצה מישהו שיהיה אחראי ליצירת מחלקות, תוציא אותו למחלקת factory נפרדת ואופה, הצורך בסינגלטון נעלם. הפקטורי יהיה מסוגל לספור ולהחליט בעצמו מה לעשות כדי ליצור מחלקה חדשה.
הבנתי את ההתנגדות שלך למתודות סטטיות. אבל מה עם משתנים סטטיים? (קבוע של מחלקה למשל תמיד יהיה סטטי.) מה עם משתנים סטטיים שהתחום שלהם בתוך פונקציות?
קבוע זה קבוע ואני בעד קבועים.
לגבי משתנים, אם אין לך מטודות סטטיות, גם אין סיבה שיהיו לך משתנים סטטיים, למרות שהסיפור איתם זהה.
מצאתי מאמר מעולה שמפרט על הנושא ומסביר אותו באריכות.